/*

 * Copyright (C) 2021 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */
 package com.aries.ui.util;

 import ohos.agp.components.AttrSet;
 import ohos.agp.components.element.Element;
 import ohos.agp.components.element.VectorElement;

 import ohos.agp.utils.TextTool;

 import ohos.app.Context;


 /**
  * 自定义属性工具类
  * <p>
  * 注意： 宽高都为 match_content 且无实际内容时构造方法不会调用
  * 使用方法：
  * xxx extends Component
  * 获取自定义属性：
  * String count = AttrUtils.getStringFromAttr(attrSet,"cus_count","0");
  * <p>
  * 属性定义：
  * 布局头中加入  xmlns:hap="http://schemas.huawei.com/apk/res/ohos" 使用hap区分自定义属性与系统属性
  * 即可使用 hap:cus_count="2"  不加直接使用ohos:cus_count="2"
  */
 public final class AttrUtils {

     private AttrUtils() {
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultValue 默认值
      * @return 属性参数
      */
     public static String getStringFromAttr(AttrSet attrSet, String name, String defaultValue) {
         String value = defaultValue;
         if (attrSet.getAttr(name) != null && attrSet.getAttr(name).isPresent()) {
             value = attrSet.getAttr(name).get().getStringValue();
         }
         return value;
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultValue 默认值
      * @return 属性参数
      */
     public static Integer getDimensionFromAttr(AttrSet attrSet, String name, Integer defaultValue) {
         Integer value = defaultValue;
         if (attrSet.getAttr(name) != null
                 && attrSet.getAttr(name).isPresent()) {
             value = attrSet.getAttr(name).get().getDimensionValue();
         }
         return value;
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultValue 默认值
      * @return 属性参数
      */
     public static Integer getIntegerFromAttr(AttrSet attrSet, String name, Integer defaultValue) {
         Integer value = defaultValue;
         if (attrSet.getAttr(name) != null
                 && attrSet.getAttr(name).isPresent()) {
             value = attrSet.getAttr(name).get().getIntegerValue();
         }
         return value;
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultValue 默认值
      * @return 属性参数
      */
     public static float getFloatFromAttr(AttrSet attrSet, String name, float defaultValue) {
         float value = defaultValue;
         if (attrSet != null && attrSet.getAttr(name) != null
                 && attrSet.getAttr(name).isPresent()) {
             value = attrSet.getAttr(name).get().getFloatValue();
         }
         return value;
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultValue 默认值
      * @return 属性参数
      */
     public static int getColorFromAttr(AttrSet attrSet, String name, int defaultValue) {
         int value = defaultValue;
         if (attrSet.getAttr(name) != null
                 && attrSet.getAttr(name).isPresent()) {
             value = attrSet.getAttr(name).get().getColorValue().getValue();
         }
         return value;
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultValue 默认值
      * @return 属性参数
      */
     public static boolean getBooleanFromAttr(AttrSet attrSet, String name, boolean defaultValue) {
         boolean value = defaultValue;
         if (attrSet.getAttr(name) != null
                 && attrSet.getAttr(name).isPresent()) {
             value = attrSet.getAttr(name).get().getBoolValue();
         }
         return value;
     }

     /**
      * 属性参数.
      *
      * @param attrSet 属性集
      * @param name 名称
      * @param defaultElement 默认Element
      * @return 属性参数
      */
     public static Element getElementFromAttr(AttrSet attrSet, String name, Element defaultElement) {
         Element element = defaultElement;
         if (attrSet.getAttr(name) != null
                 && attrSet.getAttr(name).isPresent()) {
             element = attrSet.getAttr(name).get().getElement();
         }
         return element;
     }

     /**
      * 属性参数.
      *
      * @param context 上下文
      * @param attrSet 属性集
      * @param id id
      * @return 属性参数
      */
     public static Element getVectorElementFormAttr(Context context, AttrSet attrSet, String id) {
         String str = getStringFromAttr(attrSet, id, "");
         if (!TextTool.isNullOrEmpty(str) && str.contains(":")) {
             String elementId = str.substring(str.indexOf(':') + 1);
                 try {
                     return new VectorElement(context, Integer.parseInt(elementId));
                 } catch (IndexOutOfBoundsException e) {
                     return null;
                 }
         }else {
             return null;
         }
     }
 }
